sequenceDiagram
    participant Poller
    participant EventLoop
    participant Channel
    participant UserCallback

    loop Event Loop
        EventLoop->>Poller: poll(timeout)
        Poller-->>EventLoop: events ready
        EventLoop->>EventLoop: set active channels
        EventLoop->>Channel: handleEvent()
        alt Read Event
            Channel->>UserCallback: readCallback()
        else Write Event
            Channel->>UserCallback: writeCallback()
        else Timer Event
            Channel->>UserCallback: timeoutCallback()
        end
        EventLoop->>EventLoop: doPendingFunctors()
    end